package com.skyd.core.game.td;

import java.util.concurrent.CopyOnWriteArrayList;

import com.skyd.core.game.GameWorld;

/**
 * 塔防世界
 * 
 * @author SkyD
 * 
 */
public class TDWorld extends GameWorld implements ITDWorld {

	private static TDWorld Instance;

	/**
	 * 获取单例实例
	 * 
	 * @return
	 */
	public static TDWorld getInstance() {
		if (Instance == null)
			Instance = new TDWorld();
		return Instance;
	}
	
	/**
	 * 清除旧的实例，获取全新的单例实例
	 * 
	 * @return
	 */
	public static TDWorld getNewInstance() {
		Instance = null;
		Instance = new TDWorld();
		return Instance;
	}

	protected TDWorld() {
		_Towers=new CopyOnWriteArrayList<ITDTower>();
		_Biont=new CopyOnWriteArrayList<ITDBiont>();
		_Bullets=new CopyOnWriteArrayList<ITDBullet>();
	}

	@Override
	public void update() {
		super.update();
		for (ITDTower f : _Towers) {
			f.update();
		}
		for (ITDBiont f : _Biont) {
			f.update();
		}
		for (ITDBullet f : _Bullets) {
			f.update();
		}
		_Map.update();
	}
	
	/**
 * 初始值为100。
 * 功能注释：生命值
 */
	private  int _HP = 100;
/**
 * 获取HP。
 * 功能注释：生命值
 * @return 当前的int类型的值
 */
	public  int getHP() {
		return _HP;
	}
/**
 * 设置HP。
 * 功能注释：生命值
 * @param value 要设置的int类型值
 */
	public  void setHP(int value) {
		_HP = value;
	}	
	/**
 * 使HP与传入数相加。
 * 功能注释：生命值
 * @param value 要相加的int类型值
 */
	public  void setHPPlus(int value) {
		setHP(_HP+value);
	}	
		/**
 * 使HP与传入数相乘。
 * 功能注释：生命值
 * @param value 要相乘的int类型值
 */
	public  void setHPMultiply(int value) {
		setHP(_HP*value);
	}	
	/**
 * 设置HP为其默认值(100)。
 * 功能注释：生命值
 */
	public  void setHPToDefault() {
		setHP(100);
	}
	
	/**
 * 初始值为1000。
 * 功能注释：金钱
 */
	private  int _Money = 1000;
/**
 * 获取Money。
 * 功能注释：金钱
 * @return 当前的int类型的值
 */
	public  int getMoney() {
		return _Money;
	}
/**
 * 设置Money。
 * 功能注释：金钱
 * @param value 要设置的int类型值
 */
	public  void setMoney(int value) {
		_Money = value;
	}	
	/**
 * 使Money与传入数相加。
 * 功能注释：金钱
 * @param value 要相加的int类型值
 */
	public  void setMoneyPlus(int value) {
		setMoney(_Money+value);
	}	
		/**
 * 使Money与传入数相乘。
 * 功能注释：金钱
 * @param value 要相乘的int类型值
 */
	public  void setMoneyMultiply(int value) {
		setMoney(_Money*value);
	}	
	/**
 * 设置Money为其默认值(1000)。
 * 功能注释：金钱
 */
	public  void setMoneyToDefault() {
		setMoney(1000);
	}

	@Override
	public CopyOnWriteArrayList<ITDActor> getActors() {
		CopyOnWriteArrayList<ITDActor> a = new CopyOnWriteArrayList<ITDActor>(getTowers());
		a.addAll(getBiont());
		a.addAll(getBullets());
		return a;
	}
	
	private CopyOnWriteArrayList<ITDTower> _Towers;

	@Override
	public CopyOnWriteArrayList<ITDTower> getTowers() {
		return _Towers;
	}

	private CopyOnWriteArrayList<ITDBiont> _Biont;
	
	@Override
	public CopyOnWriteArrayList<ITDBiont> getBiont() {
		return _Biont;
	}

	/**
	 * 初始值为null。 功能注释：地图
	 */
	private ITDMap _Map = null;

	/**
	 * 获取Map。 功能注释：地图
	 * 
	 * @return 当前的ITDMap类型的值
	 */
	public ITDMap getMap() {
		return _Map;
	}

	/**
	 * 设置Map。 功能注释：地图
	 * 
	 * @param value
	 *            要设置的ITDMap类型值
	 */
	public void setMap(ITDMap value) {
		_Map = value;
	}

	/**
	 * 设置Map为其默认值(null)。 功能注释：地图
	 */
	public void setMapToDefault() {
		setMap(null);
	}

	private CopyOnWriteArrayList<ITDBullet> _Bullets;
	
	@Override
	public CopyOnWriteArrayList<ITDBullet> getBullets() {
		return _Bullets;
	}

}
